package com.practice.springboot_01_zwj.mapper;

import com.practice.springboot_01_zwj.entity.dto.TaskAllQueryRequest;
import com.practice.springboot_01_zwj.entity.MainTask;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
import java.util.Map;

@Mapper
public interface MainTaskMapper {
    int insert(MainTask mainTask);
    int update(MainTask mainTask);
    int completeTask(@Param("mainId") Integer mainId, @Param("actualFinishTime") Date actualFinishTime);
    int terminateTask(@Param("mainId") Integer mainId);
    MainTask selectById(Integer mainId);
    List<MainTask> selectByExecutor(String executor);
    int checkEditable(Integer mainId);
    int updateProgress(@Param("mainId") Integer mainId, @Param("taskProgress") Double taskProgress);


    // 专用更新进度和状态
    int updateProgressAndState(MainTask mainTask);
    // 分页查询主任务（按派发人）
    List<MainTask> selectTasksByDistributor(
            @Param("distributor") String distributor,
            @Param("mainName") String mainName,
            @Param("executor") String executor,
            @Param("taskState") Integer taskState,
            @Param("taskType") String taskType,
            @Param("deptName") String deptName,
            @Param("offset") int offset,
            @Param("pageSize") int pageSize
            // 新增当前日期参数
    );

    // 统计查询结果总数（按派发人）
    int countTasksByDistributor(
            @Param("distributor") String distributor,
            @Param("mainName") String mainName,
            @Param("executor") String executor,
            @Param("taskState") Integer taskState,
            @Param("taskType") String taskType,
            @Param("deptName") String deptName
    );

    // 根据执行人分页查询主任务详细信息
    List<MainTask> selectTasksByExecutorOrSubExecutor(
            @Param("currentUser") String currentUser,
            @Param("mainName") String mainName,
            @Param("taskState") Integer taskState,
            @Param("taskType") String taskType,
            @Param("deptName") String deptName,
            @Param("offset") int offset,
            @Param("pageSize") int pageSize
    );

    // 统计查询结果总数
    int countTasksByExecutorOrSubExecutor(
            @Param("currentUser") String currentUser,
            @Param("mainName") String mainName,
            @Param("taskState") Integer taskState,
            @Param("taskType") String taskType,
            @Param("deptName") String deptName
    );

    List<Map<String, Object>> selectAllTasksWithDetails(TaskAllQueryRequest request);
    // 添加状态更新方法
    int updateTaskState(MainTask mainTask);

    // 概览统计方法
    int countDistributedTasks(@Param("currentUser") String currentUser);
    int countReceivedTasks(@Param("currentUser") String currentUser);
    int countCompletedTasks(@Param("currentUser") String currentUser);
    // 更新后的方法
    int countInProgressTasks(@Param("currentUser") String currentUser);
    int countMonthlyKeyResults(@Param("currentUser") String currentUser);

    // 新增方法
    int countCompletedKeyResults(@Param("currentUser") String currentUser);
    // 在MainTaskMapper中添加方法，用于验证用户权限
    MainTask selectMainTaskBySubId(@Param("subId") Integer subId);
    // 修正参数类型：mainId是int类型
    String getUserIdByMainId(@Param("mainId") int mainId);
}